package com.cicc.wm.lock;

import java.util.concurrent.TimeUnit;

/**
 * 分布式锁
 */
public interface DistributedLock {
    /**
     * 获取锁
     */
    void lock();

    /**
     * 获取锁
     *
     * @param leaseTime 锁过期时间
     * @param unit      时间单位
     */
    void lock(long leaseTime, TimeUnit unit);

    /**
     * 尝试获取锁
     *
     * @return 获取锁成功返回true，否则返回false
     */
    boolean tryLock();

    /**
     * 尝试获取锁
     *
     * @param time 获取锁等待时间
     * @param unit 时间单位
     * @return 获取锁成功返回true，否则返回false
     * @throws InterruptedException 线程中断异常
     */
    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

    /**
     * 尝试获取锁
     *
     * @param waitTime  获取锁等待时间
     * @param leaseTime 锁过期时间
     * @param unit      时间单位0
     * @return 获取锁成功返回true，否则返回false
     */
    boolean tryLock(long waitTime, long leaseTime, TimeUnit unit) throws InterruptedException;

    /**
     * 释放锁
     */
    void unlock();
}
